package principal;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Hashtable;

public class Archivo {

	private File archivo;
	private ArrayList<String> hombres;
	private ArrayList<String> mujeres;
	private Hashtable<String, ArrayList<String>> preferencias; 
	
	public Archivo(String ruta)
	{
		this.hombres = new ArrayList<String>();
		this.mujeres = new ArrayList<String>();
		this.preferencias = new Hashtable<String, ArrayList<String>>();
		this.setArchivo(ruta);
	}
	
	private ArrayList<String> convertirLista (String[] vector){
		
		ArrayList<String> lista= new ArrayList<String>();

		Collections.addAll(lista, vector); 
		
		return lista;
	}
	
	public void CargarDatos() throws Exception
	{
		
		FileReader reader;
		try 
		{
			Boolean listaDehombres = true;
			
			reader = new FileReader(this.archivo);
			BufferedReader br = new BufferedReader(reader);
			String linea = br.readLine();
			
			while(linea != null){
				if(linea.isEmpty()){
					listaDehombres = false;
					linea = br.readLine();
				}
				
				String[] personaPreferencias = linea.split(": ");
				String persona = personaPreferencias[0];
				String[] preferenciasDeLaPersona = personaPreferencias[1].split(",");
				
				this.preferencias.put(persona, this.convertirLista(preferenciasDeLaPersona));
				
				if(listaDehombres)				
					this.hombres.add(persona);
				else
					this.mujeres.add(persona);
				
				linea = br.readLine();
				
			}			
			
		} 
		catch(ArrayIndexOutOfBoundsException e)
		{
			throw new IOException("No se pudo leer el archivo.No tiene la siguiente estructura: Nombre: Preferencias");		
		}
		catch (FileNotFoundException e) 
		{		
			throw new FileNotFoundException("El archivo no existe en el directorio.");
			
		} 
		catch (IOException e) 
		{			
			throw new IOException("No se pudo leer el archivo.");
		}
		catch(Exception e)
		{
			throw new Exception("Se produjo un error, por favor pruebe nuevamente.");
		}
		
			
	}
	

	public void setArchivo(String rutaArchivo) {
		try{
			this.archivo = new File(rutaArchivo);
		}
		catch(NullPointerException e)
		{
			System.out.print(String.format("La siguiente ruta de ubicacion de archivo es incorrecta {0}",rutaArchivo));
		}
		
	}
	
	public ArrayList<String> getHombres(){
		return this.hombres;
	}
	
	public ArrayList<String> getMujeres(){
		return this.mujeres;
	}
	
	public Hashtable<String, ArrayList<String>> getPreferencias(){
		return this.preferencias;
	}
	
	
}
